package agents.communication;

import gui.MainWindow;
import jade.core.Agent;
import jade.domain.DFService;
import jade.domain.FIPAException;
import jade.domain.FIPAAgentManagement.DFAgentDescription;
import jade.domain.FIPAAgentManagement.ServiceDescription;
import log.ContadorEventos;

import javax.swing.SwingUtilities;

import org.apache.log4j.Logger;


import org.apache.log4j.PropertyConfigurator;

import agents.messages.MessageConstants;
/**
 * 
 * @author Elena
 * Encargado de la comunicación entre la GUI y los actores
 *
 */
public class CommunicationAgent extends Agent{
	
	public static MainWindow inst;
	
	private DFAgentDescription dfd;
	private InitMessagesBehavior init;
	static Logger logger = Logger.getLogger(CommunicationAgent.class);
	//private Window window;
	
	
	
	protected void setup(){
		//window = new Window(Singleton.getMap("aula3.jpg"));
		 // BasicConfigurator replaced with PropertyConfigurator.
		String file = (String)this.getArguments()[0];
		createGUI(file);
	    PropertyConfigurator.configure("log4j.properties");
		//Publicaci�n del servicio del agente:
		dfd = new DFAgentDescription();
		dfd.setName(getAID());
		ServiceDescription sd = new ServiceDescription();
		sd.setType(MessageConstants.SERV_ENVIO_COORDENADAS);  //Tipo del servicio que ofrece el agente en las paginas amarillas
		sd.setName("communication-agent");  //Nombre del servicio ofrecido
		dfd.addServices(sd);
		try{
			DFService.register(this, dfd);
		}
		catch(FIPAException e) {
			e.printStackTrace();
		}
		init = new InitMessagesBehavior();
		addBehaviour(init);
		
//		logger.info(ContadorEventos.nextId()+" - Agente "+getLocalName()+ " creado satisfactoriamente, e insertado el servicio "+sd.getName()+".");
	}
	
	
	protected void createGUI(String file){
		final String st=file;
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				inst = new MainWindow(st);
				inst.setLocationRelativeTo(null);
				inst.setVisible(true);
			}
		});
	}
	
	public MainWindow getMainWindow(){
		return inst;
	}


	protected void takeDown(){
		
		try {
			DFService.deregister(this);
		} catch (FIPAException e) {
			e.printStackTrace();
		}
		logger.info(ContadorEventos.nextId()+" - Agente "+getLocalName()+ "terminando...");
	}


}
